// 防抖（Debounce）
// 防抖会在一定时间间隔内等待函数的连续调用，
// 如果在这个时间间隔内没有再次调用，那么才执行函数。
// 如果在这个时间间隔内又调用了，会重新计时，直到没有再次调用才执行函数。
// const debounceTime = (fnc, delay) => {
//   let time_id;
//   return () => {
//     if (time_id) {
//       clearTimeout(time_id);
//     }
//     time_id = setTimeout(() => {
//       fnc();
//     }, delay);
//   }
// }
function debounce(func, delay) {
  let timeoutId;
  return function (...args) {
    const context = this;
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => {
      func.apply(context, args);
    }, delay);
  };
}

// 使用示例
const debouncedFunc = debounce(function () {
  console.log("Debounced function executed");
}, 1000);

// 模拟事件触发
setInterval(debouncedFunc, 100); // 这里模拟每100ms触发一次

//   节流（Throttle）
// 节流会在一定时间间隔内执行一次函数，无论触发的频率有多高，
// 都只执行一次。如果在该时间间隔内又触发了，那么将会忽略后续触发，直到过了设定的时间间隔后才会执行下一次
function throttle(func, delay) {
  let lastCallTime = 0;
  return function (...args) {
    const now = Date.now();
    if (now - lastCallTime >= delay) {
      func.apply(this, args);
      lastCallTime = now;
    }
  };
}

// 使用示例
const throttledFunc = throttle(function () {
  console.log("Throttled function executed");
}, 1000);

// 模拟事件触发
setInterval(throttledFunc, 100); // 这里模拟每100ms触发一次
